home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
System Booster
/
System Booster.iso
/
SYS
/
s
/
texadr.wrx
< prev
next >
Wrap
Text File
|
1996-09-26
|
10KB
|
411 lines
/* Programm zum Adressenimport */
/*
* Written 1993 by MGR, Asgard
* © 1993 by Lars Hanke
* contact: mgr@asgard.bo.open.de
*
* Bedienung:
* Vorrausetzung: WRITE und DFA müssen beide einen AREXX Port haben
*
* In folgender Priorität werden Namen aus der Datei gesucht
*
* 1) Markierter Block
* Der Inhalt des Markierten Blocks wird *CASEINSENSITIV*
* mit allen Feldern der Addressdatei verglichen. Stimmt
* er mit einem Feld überein, so wird der gefundene Name
* und die zugehörige Stadt in einem Requester angezeigt.
* Handelt es sich nicht um den gewünschten, so wird nach
* dem nächsten passenden Eintrag gesucht.
*
* 2) Selektierter Eintrag
* Ist im DFA Fenster ein Eintrag selektiert, aber kein
* Block vollständig markiert, so schlägt das Skript den
* nächsten selektierten - inklusive dem aktuellen - Eintrag
* vor. Folgt kein selektierter Eintrag, so wird die Datei
* vom Anfang nach selektierten Einträgen durchsucht.
* Wird der Eintrag abgelehnt, schlägt das Skript den
* nächsten Selektierten vor. Folgen keine weiteren, wird
* die Suche abgebrochen.
*
* 3) Aktuelles Wort
* Mit dem Cursor als Ende bis zum Wortanfang wird der Inhalt
* eingelesen, als Block markiert und ohne führende oder
* abschließende Leerzeichen als Fragment für eine ebenfalls
* *CASEINSENSITIVE* Suche in allen Feldern angegeben. Danach
* ist der Ablauf analog zu 1)
*
* Achtung: Die markierten Blöcke werden gelöscht, wenn die Suche
* erfolgreich verlief.
*
* Die Adresse wird Anhand des COUNTRY Eintrags für das Bestimmungsland
* formattiert. Bislang werden folgende Staaten erkannt:
* FRG - Deutschland (Staatenkennung nur D-PLZ)
* NL - Niederlande (Staatenkennung nur NL-PLZ)
* USA
* Canada
* France
* Belgium
* Wird die Kennung nicht erkannt, wird eine deutsche Formattierung mit
* ausgeschriebener Staatenkennung erzeugt. Im deutschen Formattierungs-
* modul wird die Anrede "Herr" zu "Herrn" dekliniert. Im französisch-
* belgischen Modul wird "Mlle." als "M\raisebox{0.5ex}{\scriptsize lle}"
* gesetzt, analog "Mme.".
*
* Bugs:
* - "SEARCHNEXT" in DFA scheint nicht vernuenftig zu funktionieren
* - Das Skript arbeitet phantatstisch von der Shell, aber der Aufruf
* aus WRITE selbts mittels "DoRexx" klappt nicht.
*
* Enhancements:
* - Silent mode
*
* History:
* v1.00 17.08.1993 - Grob lauffähig, kommentiert und dokumentiert
* v1.01 17.08.1993 - DFA reagiert sauer auf 'SELECT QUERY', wenn noch
* nichts selektiert wurde. Das wird nun abgefangen.
* v1.02 22.09.1993 - an WRITE 3.0 angepaßt
* v1.03 23.10.1993 - Staatenkennung NL eingebaut, allerdings ist die
* Deklanation der Anrede derzeit unmoeglich, da ich
* kein Niederlaendisch kann.
* v1.04 31.10.1993 - Hollädische Anreden nun eingebaut, dank Raymond Penners,
* Autor von PhoneBill, der mir die Briefanreden zusandte.
*
*/
/*
* Check if WRITE and DFA are running
*/
IF ~show('P',"WRITE")
THEN DO
say 'This script does not make sense without the "WRITE" editor !'
exit 10
END
address 'WRITE'
'VERSIONCHECK 3848 "TeXAdr.wrx"'
IF RC~=0 THEN DO
exit 10
END
'LockWindow _CurrentID'
if (RC ~= 0)
then do
'MessageOK "You should have a window!"'
exit 10
end
IF ~show('P',"DFA")
THEN DO
address 'WRITE'
'MessageOK "DFA not found!"'
'LockWindow 0'
exit 10
END
/*
* Are there any selected entries in DFA?
*/
selected=1
address 'DFA'
options results
'select query'
if ((RESULT = 0) & (RC = 0))
then do
'NEXTSEL'
if (RC ~= 0)
then do
'FIRST'
'NEXTSEL'
if (RC ~= 0)
then selected=0
end
end
else do
if (RC ~= 0) then selected=0
end
/*
* A Blockmark in 'WRITE' overrides SELECT !
*/
address 'WRITE'
'GETVAR "_MARKED"'
if (RESULT = 2) then selected=0
address 'DFA'
if (selected ~= 0)
then do
/*
* browse through selections
*/
'GETCURRENT stem ADR.'
address 'WRITE'
'GETVAR "_XPOS"'
a.x=RESULT
'GETVAR "_YPOS"'
a.y=RESULT
found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n at:' ADR.ADDRESS.5||'"'
cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
cmd
'GETVAR "_RN"'
cnt=RESULT
do while (cnt ~= 0)
address 'DFA'
'NEXTSEL'
if (RC ~= 0)
then do
address 'WRITE'
'MessageOK "No more entries selected!"'
'LockWindow 0'
exit 5
end
'GETCURRENT stem ADR.'
address 'WRITE'
found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n at:' ADR.ADDRESS.5||'"'
cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
say cmd
cmd
'GETVAR "_RN"'
cnt=RESULT
end
end
else do
/*
* Seek for a fitting entry
*/
address 'WRITE'
options results
'GETVAR "_MARKED"'
automark=0
if (RESULT < 2)
then do
/*
* No proper marked block, use current word
*/
'Unmark'
'SetMark'
'GETVAR "_MARKAX"'
b.x=RESULT
'GETVAR "_MARKAY"'
b.y=RESULT
'LastWord'
'SetMark'
automark=1
'GETVAR "_MARKAX"'
a.x=RESULT
'GETVAR "_MARKAY"'
a.y=RESULT
end
else do
'GETVAR "_MARKAX"'
a.x=RESULT
'GETVAR "_MARKAY"'
a.y=RESULT
'GETVAR "_MARKBX"'
b.x=RESULT
'GETVAR "_MARKBY"'
b.y=RESULT
end
/*
* Read all chars in marked block
*/
pat=""
'GOTO' a.x a.y
c.x=a.x
c.y=a.y
DO UNTIL (((c.x > b.x) & (c.y >= b.y)) | ((a.x >= b.x) & (a.y >= b.y)))
'GETVAR "_CURRENTCHAR"'
pat=pat||RESULT
'CursorRight 1'
'GETVAR "_XPOS"'
c.x=RESULT
'GETVAR "_YPOS"'
c.y=RESULT
END
pat=strip(pat);
/*
* Marked blocks are considered to be exact, last words may be fragments
*/
if (automark ~= 0)
then pat="#?"||pat||"#?"
/*
* Search the current pattern
*/
address 'DFA'
options results
'search' pat 'ignorecase fields=all stem ADR.'
if (RC ~= 0)
then do
address 'WRITE'
msg=pat||' not found!'
'MessageOK "'||msg||'"'
'LockWindow 0'
exit 5
end
address 'WRITE'
found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n at:' ADR.ADDRESS.5||'"'
cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
cmd
'GETVAR "_RN"'
cnt=RESULT
/*
* Search next occurence - anyhow, DFA seems to be in trouble with SEARCHNEXT
*/
do while (cnt ~= 0)
address 'DFA'
'searchnext stem ADR.'
if (RC ~= 0)
then do
address 'WRITE'
msg='No more matches for: '||pat
'MessageOK "'||msg||'"'
'LockWindow 0'
exit 5
end
'GetCurrent stem ADR.'
address 'WRITE'
found='"Found:' ADR.ADDRESS.2 ADR.ADDRESS.1 '\n at:' ADR.ADDRESS.5||'"'
cmd='ASK' found '"'||"_OK *|_Next ^"||'"'
say cmd
cmd
'GETVAR "_RN"'
cnt=RESULT
end
/*
* Remove the bait from the text
*/
address 'WRITE'
'DeleteBlock'
'GOTO' a.x a.y
end
/*
* We have somehow found the address we like and have it in ADR.ADDRESS
* now output it to WRITE according to the national address format and
* TeX style formatting characters.
*/
'WriteChar 37'
'Return'
'Tab 1'
select
when ADR.ADDRESS.6="FRG"
then do
anrede=ADR.ADDRESS.0
if (ADR.ADDRESS.0="Herr") then anrede="Herrn"
anrede="An "||anrede
'WriteText "'||anrede||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.3||'\\[1ex]%"'
'Return'
'WriteText "{\bf D-'||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'"'
end
when ADR.ADDRESS.6="NL"
then do
anrede=ADR.ADDRESS.0
if (ADR.ADDRESS.0="Heer") then anrede="De Heer"
if (ADR.ADDRESS.0="Vrouw") then anrede="Mevrouw"
if (ADR.ADDRESS.0="Juffrouw") then anrede="Mejuffrouw"
'WriteText "'||anrede||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.3||'\\[1ex]%"'
'Return'
'WriteText "{\bf NL-'||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'"'
end
when ((ADR.ADDRESS.6="France") | (ADR.ADDRESS.6="Belgium"))
then do
anrede=ADR.ADDRESS.0
if (anrede = "Mlle.") then anrede="M\raisebox{0.5ex}{\scriptsize lle}"
if (anrede = "Mme.") then anrede="M\raisebox{0.5ex}{\scriptsize me}"
anrede="Pour "||anrede
'WriteText "'||anrede||'\\%"'
'Return'
'WriteText "{\sc '||ADR.ADDRESS.1||'}' ADR.ADDRESS.2||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.3||'\\%"'
'Return'
'WriteText "{\bf '||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'\\[1ex]%"'
'Return'
'WriteText "\underline{'||ADR.ADDRESS.6||'}"'
end
when ADR.ADDRESS.6="USA"
then do
anrede=ADR.ADDRESS.0
anrede="To "||anrede
'WriteText "'||anrede||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.3||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.5||'\\[1ex]%"'
'Return'
'WriteText "'||ADR.ADDRESS.4 '\underline{USA}"'
end
when ADR.ADDRESS.6="Canada"
then do
anrede=ADR.ADDRESS.0
anrede="To "||anrede
'WriteText "'||anrede||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.3||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.5||'\\[1ex]%"'
'Return'
'WriteText "\underline{Canada}' ADR.ADDRESS.4||'"'
end
otherwise do
anrede=ADR.ADDRESS.0
'WriteText "'||anrede||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.2 ADR.ADDRESS.1||'\\%"'
'Return'
'WriteText "'||ADR.ADDRESS.3||'\\%"'
'Return'
'WriteText "{\bf '||ADR.ADDRESS.4||'} '||ADR.ADDRESS.5||'\\[1ex]%"'
'Return'
'WriteText "\underline{'||ADR.ADDRESS.6||'}"'
end
end
'LockWindow 0'
exit 0